<?php
/**
 * mysql 常用的  建议命名为 f_sql_
 * 
 */

/**
 * 删除sql条件中紧跟where的and, 如果只含有where， 将返回空字符串
 *
 * @param String $where SQL
 * @return String
 */
function fSql_replaceAnd($sWhere){
	$sWhere = strtolower($sWhere);
	$sWhere = preg_replace('/and/', ' ', $sWhere, 1);
	if (trim($sWhere) == 'where'){
		return '';
	}
	return $sWhere;
}

/**
 * 空格分词, 并去掉重复， 返回单词数组 
 * 
 * ? 是否要去掉特殊字符，是否要统一英文字母的大小写
 *
 * @param string $sSearch 关键词
 * @return array
 */
function fSql_cutWords($sKeywords){
	$aKeywords = explode(' ', $sKeywords);
	foreach ($aKeywords as $key => $sWord){
		if ($sWord == ''){
			unset($aKeywords[$key]);
		}
	}
	return array_values(array_unique($aKeywords));
}

/**
 * 将二维数组变成一维数组
 *
 * @param array $aTwo 二维数组
 * @param string $sField 字段名
 * @return array
 */
function f_sql_twoToOne($aTwo, $sField=''){

	if (empty($aTwo) || !is_array($aTwo)){
		return array();
	}

	foreach ($aTwo as $aD){
		if (empty($sField)){
			$aVal = array_values($aD);
			$aOne[] = $aVal[0];
		} else {
			$aOne[] = $aD[$sField];
		}
	}
	return $aOne;
}

/**
 * 将批量可执行的短SQL数组分割组合成大的Sql
 *
 * @param array $aSql SQL语句数组
 * @param int $nSize 分割大小
 * @return array
 */
function f_sql_mergeForExecute($aSql, $nSize=100){
	if (empty($aSql)){
		return array();
	}
	$aSqlListE = array();
	$aSqlList = array_chunk($aSql, $nSize);
	foreach ($aSqlList as $aD){
		$aSqlListE[] = implode('', $aD);
	}

	return $aSqlListE;
}

/**
 * 将二维数组变成IdName数组 用于下拉框
 *
 * @param array $aTwo 二维数组
 * @param bool $isCheckKey 是否改变key为id name
 * @return array
 */
function f_sql_twoToIdName($aTwo, $isCheckKey=true){
	if (empty($aTwo) || !is_array($aTwo)){
		return array();
	}
	$aIdName = array();
	if ($isCheckKey){
		foreach ($aTwo as $aD){
			$aVal = array_values($aD);
			$aOne['id'] = $aVal[0];
			$aOne['name'] = $aVal[1];

			if (count($aD) > 2){
				$aD_fix = array_slice($aD, 2);
				$aOne = array_merge($aOne, $aD_fix);
			}
			$aIdName[$aOne['id']] = $aOne;
		}
	} else {
		foreach ($aTwo as $aD){
			$aVal = array_values($aD);
			$aIdName[$aVal[0]] = $aD;
		}
	}

	return $aIdName;
}

/**
 * 为数据库中取出的二维数组创建key
 *
 * @param array $aTwo 二维数组
 * @param string $sKey 字段名 为空则以数据的第一个字段为key
 * @return array
 */
function f_sql_dataMakeKey($aTwo, $sKey=''){
	if (empty($aTwo) || !is_array($aTwo)){
		return array();
	}

	if (empty($sKey)){
		$aKey = array_keys($aTwo[0]);
		$sKey = $aKey[0];
	}

	$aReturn = array();
	foreach ($aTwo as $aD){
		$aReturn[$aD[$sKey]] = $aD;
	}
	return $aReturn;
}

/**
 * 过滤查询关键词
 *
 * @param string $s
 * @return string
 */
function f_sql_filter_serach($str){
	$s = trim($str);
	if (empty($s)){
		return '';
	}

	$aS = explode(' ', $s);
	return implode('', $aS);
}

/**
 * 将分页的sql转化为用作count总数的sql 简单处理
 *
 * @param string $sSql
 * @return int
 */
function f_sqlpage_cutForCount($sSql){
	$aCut = explode(' from ', $sSql);
	unset($aCut[0]);
	$sNewSql = implode(' from ', $aCut);
	$aCut =  explode(' limit ', $sNewSql);
	unset($aCut[count($aCut) - 1]);
	$sSqlCount = 'select count(*) as count from '.implode(' limit ', $aCut);
	return $sSqlCount;
}

/**
 * 检查事务是否全部执行成功
 *
 * @param array $aOp
 * @return bool
 */
function f_sql_transCheck($aOp){
	foreach ($aOp as $k){
		if ($k === false){
			return false;
		}
	}
	return true;
}
